﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Anagramme.Contracts;

namespace Anagramme.Server.Service
{
    /// <summary>
    /// Contexte de données de l'application
    /// </summary>
    public class ServerContext
    {
        #region Static Fields
        private static ServerContext _current = new ServerContext();
        #endregion

        #region Static Properties
        /// <summary>
        /// Contexte de donné par défaut
        /// </summary>
        public static ServerContext Current 
        { 
            get { return _current; } 
        }
        #endregion

        #region Properties
        /// <summary>
        /// Obtient les informations sur l'équipe Bleue
        /// </summary>
        public Team BlueTeam { get; internal set; }

        /// <summary>
        /// Obtient les informations sur le round courant
        /// </summary>
        public RoundInfo CurrentRound { get; internal set; }

        /// <summary>
        /// Obtient les informations sur la partie en cours
        /// </summary>
        public GameInfo GameInfo { get; internal set; }

        /// <summary>
        /// Obtient une valeur indiquant si le jeu est en cours
        /// </summary>
        public ServerState State { get; internal set; }

        /// <summary>
        /// Obtient les informations sur le lobby
        /// </summary>
        public LobbyInfo LobbyInfo { get; internal set; }

        /// <summary>
        /// Obtient la liste des joueurs
        /// </summary>
        public ICollection<Player> Players { get; internal set; }

        /// <summary>
        /// Obtient le nombre de joueurs prêts à joueur
        /// </summary>
        public int PlayersReadyCount { get; internal set; }

        /// <summary>
        /// Obtient les informations sur l'équipe Rouge
        /// </summary>
        public Team RedTeam { get; internal set; }

        /// <summary>
        /// Obtient les informations sur le résultat de la partie
        /// </summary>
        public ResultInfo ResultInfo { get; internal set; }
        #endregion
    }
}
